// 质数筛 埃氏筛法 线性筛法
// 测试链接 ：https://www.luogu.com.cn/problem/P3383
// 相关帖子 ：https://www.cnblogs.com/dx123/p/16689861.html
// 相关帖子 ：https://oi-wiki.org/math/number-theory/sieve/
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

#define ll long long
const int MAXN = 100000001;
bool visited[MAXN]; // visited[i] 等于 true，表示 i 是合数
int prime[MAXN]; // 记录质数
int cnt; // 质数个数

// 埃氏筛法，时间复杂度 O(n*loglogn)
void Eratosthenes(int n)
{
    for(ll i = 2; i <= n; ++i)
    {
        // i 是质数
        if(!visited[i])
        {
            prime[++cnt] = i;
            // 划掉合数
            for(ll j = i * i; j <= n; j += i)
            {
                visited[j] = true;
            }
        }
    }
}

// 线性筛法（欧拉筛法），时间复杂度 O(n)
void Euler(int n)
{
    for(int i = 2; i <= n; ++i)
    {
        // i 是质数
        if(!visited[i]) prime[++cnt] = i;
        // 划掉合数，并保证合数只被划掉一次
        for(int j = 1; 1LL * i * prime[j] <= n; ++j)
        {
            // prime[j] 是 i * prime[j] 的最小质因子
            visited[i * prime[j]] = true;
            if(i % prime[j] == 0) break;
        }
    }
}

int main()
{
    int n, q, k;
    scanf("%d%d", &n, &q);
    // Eratosthenes(n);
    Euler(n);
    while(q--)
    {
        scanf("%d", &k);
        printf("%d\n", prime[k]);
    }

    return 0;
}